﻿using System.Net.Sockets;

namespace TCPActivePull.Config
{
    // 1. 设备配置（仅保留IP、ID、寄存器）
    public class DeviceConfig
    {
        public string DeviceId { get; set; } = string.Empty;       // 设备标识
        public string DeviceIp { get; set; } = string.Empty;       // 核心：设备IP（唯一访问依据）
        // 【新增】功能码配置（3=保持寄存器，4=输入寄存器，默认3）
        public byte FunctionCode { get; set; } = 3;

        public List<RegisterConfig> Registers { get; set; } = new();// 寄存器配置
    }

    // 2. 寄存器配置（不变，保留标签/缩放比）
    public class RegisterConfig
    {
        public string RegisterAddress { get; set; } = string.Empty;// 寄存器地址
        public string DataName { get; set; } = string.Empty;       // 数据标签（如“环境温度”）
        public double Scale { get; set; } = 1.0;                   // 缩放比
        public string Unit { get; set; } = string.Empty;           // 单位
    }

    // 3. 总配置（移除端口，设备配置简化）
    public class IndustrialConfig
    {
        public TcpServerConfig TcpServer { get; set; } = new();    // TCP服务端配置（仅IP，端口固定）
        public int PollingIntervalMs { get; set; } = 5000;         // 采集周期
        public List<DeviceConfig> Devices { get; set; } = new();   // 设备列表（仅IP标识）
    }

    // 4. TCP服务端配置（仅IP，端口固定8888）
    public class TcpServerConfig
    {
        public string Ip { get; set; } = "127.0.0.1";              // 服务端监听IP
        /// <summary>
        /// 服务端监听端口（新增配置项）
        /// </summary>
        public int Port { get; set; } = 5002; // 默认端口，与原硬编码一致
    }

    // 客户端连接模型
    public class ClientConnection
    {
        public TcpClient Client { get; set; } = new();
        public NetworkStream Stream { get; set; } = default!;
        public string ClientId { get; set; } = string.Empty;
        public DateTime LastActiveTime { get; set; } = DateTime.Now;
    }

    // 工业数据模型
    public class IndustrialData
    {
        public string DeviceId { get; set; } = string.Empty;       // 设备标识
        public string DeviceIp { get; set; } = string.Empty;       // 设备IP
        public string RegisterAddress { get; set; } = string.Empty;// 寄存器地址
        public string DataName { get; set; } = string.Empty;       // 数据标签
        public double RawValue { get; set; }                       // 原始值
        public double ActualValue { get; set; }                    // 实际值（原始值×缩放比）
        public string Unit { get; set; } = string.Empty;           // 单位
        public DateTime Timestamp { get; set; }                    // 采集时间
    }
}
